b2b91091ee7908c11c297280af6edda797eac00b,src/org/jgroups/protocols/pbcast/STABLE.java,STABLE,updateLocalDigest,#Digest#Address#,336
Before Change
sb.append("\nmy [").append(local_addr).append("] digest after: ").append(digest).append("\n");
sb.append("\n").append(num_elements_updated).append(" elements were updated\n");
if(log.isTraceEnabled()) // todo: remove
log.trace(sb);
return num_elements_updated;
}
After Change
if(d == null || d.size() == 0)
return false;
if(!initialized) {
if(log.isTraceEnabled())
log.trace("STABLE message will not be handled as I'm not yet initialized");
return false;
}
// if(self) {
// if(heard_from.contains(sender)) {
// resetHeardFromList(mbrs);
// digest.replace(d);
// if(log.isTraceEnabled())
// log.trace("initialized digest from " + d);
// return true;
// }
// else
// return false;
// }
if(!digest.sameSenders(d)) {
if(log.isTraceEnabled())
log.trace(new StringBuffer("received a digest ").append(d.printHighSeqnos()).append(" from ").
append(sender).append(" which has different members than mine (").
append(digest.printHighSeqnos()).append("), discarding it and resetting heard_from list"));
// to avoid sending incorrect stability/stable msgs, we simply reset our heard_from list, see DESIGN
resetDigest(mbrs);
return false;
}
StringBuffer sb=null;
if(log.isTraceEnabled())
sb=new StringBuffer("my [").append(local_addr).append("] digest before: ").append(digest).
append("\ndigest from ").append(sender).append(": ").append(d).append("\n");
Address mbr;
long highest_seqno, my_highest_seqno, new_highest_seqno;
long highest_seen_seqno, my_highest_seen_seqno, new_highest_seen_seqno;
Map.Entry entry;
org.jgroups.protocols.pbcast.Digest.Entry val;
for(Iterator it=d.senders.entrySet().iterator(); it.hasNext();) {
entry=(Map.Entry)it.next();
mbr=(Address)entry.getKey();
val=(org.jgroups.protocols.pbcast.Digest.Entry)entry.getValue();
highest_seqno=val.high_seqno;
highest_seen_seqno=val.high_seqno_seen;
// compute the minimum of the highest seqnos deliverable (for garbage collection)
my_highest_seqno=digest.highSeqnoAt(mbr);
// compute the maximum of the highest seqnos seen (for retransmission of last missing message)
my_highest_seen_seqno=digest.highSeqnoSeenAt(mbr);
new_highest_seqno=Math.min(my_highest_seqno, highest_seqno);
new_highest_seen_seqno=Math.max(my_highest_seen_seqno, highest_seen_seqno);
digest.setHighestDeliveredAndSeenSeqnos(mbr, new_highest_seqno, new_highest_seen_seqno);
}
if(log.isTraceEnabled()) {
sb.append("\nmy [").append(local_addr).append("] digest after: ").append(digest).append("\n");
log.trace(sb);
}
return true;
}